/**
 * @file    pc_comm_frame.h
 * @brief   PC通信数据帧处理服务
 * @details This is the detail description.
 * @author  wang-haoyu
 * @date    2025年7月29日 (created)
 * @version 0.0.2
 * @par Copyright (C):
 *          All Rights Reserved.
 * @par Encoding:
 *          GB2312
 * @par Description        :
 * 1. Hardware Descriptions:
 *      None.
 * 2. Program Architecture:
 *      None.
 * 3. File Usage:
 *      None.
 * 4. Limitations:
 *      None.
 * 5. Else:
 *      None.
 * @par Modification:
 * -# Date          : 2025年7月29日;
 * Revision         : 0.0.1;
 * Author           : wang-haoyu;
 * Contents         : first update
 */
 
/* =============================================================================
 *                                header files
 * ========================================================================== */
#ifndef __PC_COMM_FRAME_H
#define __PC_COMM_FRAME_H

#include "pc_comm_cfg.h"
#include "pc_comm_fifo.h"

/* =============================================================================
 *                              macros & constants
 * ========================================================================== */
#define PC_COMM_HEAD 0x9A
#define PC_COMM_TAIL 0xA9

/* =============================================================================
 *                          data structure definitions
 * ========================================================================== */
typedef enum
{
    CHASSIS_MOTOR_DRV_STA 	= 0x31,	//底盘驱动器数据上报
	PERIPHERA_DATA_STA 		= 0x32,	//外设传感器数据上报
	MCU_DATA_STA 			= 0x33,	//MCU相关数据上报
	CHASSIS_INIT_STA 		= 0x34,	//底盘初始化状态上报
	CLEAR_ERR_STA 			= 0x35,	//清错状态上报
	PC_PWR_STA				= 0x36, //PC电源控制

	NORMAL_IO_CTRL_CODE 	= 0x61,	//通用IO控制下发
	CHASSIS_SPEED_CTRL_CODE = 0x62,	//底盘速度控制下发
	LIGHT_BAR_CTRL_CODE 	= 0x63,	//灯带控制下发
	TIME_STAMP_SYNC_CODE 	= 0x64,	//时间同步下发
	CHASSIS_INIT_CODE 		= 0x65,	//底盘初始化任务下发
	CLEAR_ERR_CTRL_CODE 	= 0x66,	//清错控制下发
	PC_PWR_CTRL_CODE		= 0x67, //PC电源控制反馈
}pc_comm_code_t;

typedef struct 
{
    rt_uint8_t frame_head ;//帧头
	rt_uint8_t func_code  ;//功能号
	rt_uint8_t data_len	  ;//有效数据长度   
}pc_comm_frame_head_t;

typedef struct
{
    pc_comm_frame_head_t head;
    rt_uint8_t all_buf[1024];
    rt_uint8_t proto_buf[1024];
}pc_comm_frame_t;

typedef enum
{
	E_NO_ERR = 0,			//无错误
	E_FIFO_LEN_ERR = -1,	//fifo中数据长度不满足
	E_PACK_LEN_ERR = -2,	//数据包长度错误
	E_CRC_CHECK_ERR = -3,	//CRC校验错误
	E_PROTO_SEND_ERR = -4,	//协议发送失败
	E_PROTO_RECV_ERR = -5,	//协议接收失败
}pc_comm_err_code;

/* =============================================================================
 *                         static variable definitions
 * ========================================================================== */

/* =============================================================================
 *                         static function definitions
 * ========================================================================== */

/* =============================================================================
 *                         global function definitions
 * ========================================================================== */
/*
 * proto buf通信数据解析函数
 *
 * Parameter:
 *   Input:
 *		-obj：proto buf数据帧句柄
 *   Output:
 * Returns:
 */
pc_comm_err_code pc_comm_unpark_frame_state(pccomm_fifo_port_t fifo_port,pc_comm_frame_t *obj);

#endif
/*******************************************************************************
 *                                  EOF
 ******************************************************************************/
